#include"BlockQueue.hpp"
#include"Task.hpp"
#include<string>
#include<unistd.h>
#include<ctime>


//生产消费模型
void* Consumer(void* args)
{

    BlockQueue<Task> *bq=static_cast<BlockQueue<Task> *>(args);
    //消费
    while(true)
    {
        Task t=bq->pop();
        //std::cout<<"消费了一个数据："<<t<<std::endl;
        t.run();
        sleep(1);
    }
    return nullptr;
}
void* Productor(void* args)
{
    BlockQueue<Task> *bq=static_cast<BlockQueue<Task> *>(args);
    //int data=0;
    //生产
    srand(time(nullptr));
    int len=opers.size();
    while(true)
    {
        int data1=rand()%10+1;
        int data2=rand()%10+1;
        char op=opers[rand()%len];
        Task t(data1,data2,op);
        //data++;
        int data=rand()%10+1;
        bq->push(t);
        std::cout<<"生产了一个数据："<<t.GetTask()<<std::endl;
        sleep(1);
    }
    return nullptr;
}

int main()
{
    srand(time(nullptr));
    BlockQueue<Task> *bq=new BlockQueue<Task>();
    //创建线程
    pthread_t c,p;


    pthread_create(&c,nullptr,Consumer,bq);
    pthread_create(&p,nullptr,Productor,bq);

    //等待
    pthread_join(c,nullptr);
    pthread_join(p,nullptr);



    delete bq;
    return 0;
}